package org.dreamfly.core.dao;

import java.io.Serializable;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Gin
 * Date: 2010-9-15
 * Time: 21:42:45
 * To change this template use File | Settings | File Templates.
 */
public interface BaseDAO <T, PK extends Serializable> {

	/**
	 * 添加资源
	 * @param obj 需要添加的资源对象
	 */
	void insert(T obj);

	/**
	 * 删除资源
	 * @param obj 需要删除的资源对象（注意：主键值不能为NULL）
	 */
	void delete(T obj);

	/**
	 * 更新资源
	 * @param obj 需要更新的资源对象（注意：主键值不能为NULL）
	 */
	void update(T obj);

	/**
	 * 保存或更新资源
	 * @param obj
	 */
	void saveOrUpdate(T obj);
	
	void merge( T obj);

	/**
	 * 按主键查找资源
	 * @param clazz 需要查找的资源的类
	 * @param id 对应的主键值
	 * @return
	 */
    T find(Class<T> clazz, PK id);
 
    List<T> findByExample(T bean);

    /**
     * 查询资源
     *
     * @param clazz 需要查询的资源类
     * @param title title关键字（可选项，几位null 或 ""）
     * @param firstRow 查询开始位置
     * @param maxRow 需要查询的记录数
     * @param server
     * @return
     */
    List<T> find(Class<T> clazz, String title, int firstRow, int maxRow, String server);
    
    /**
     * 查询本地资源
     * @param clazz 需要查询的资源类
     * @param title title关键字（可选项，几位null 或 ""）
     * @param serverName 服务器名称
     * @param firstRow 查询开始位置
     * @param maxRow 需要查询的记录数
     * @return
     */
    List<T> findNative(Class<T> clazz, String title,String serverName, int firstRow, int maxRow);
    
    /**
     * 查询资源数
     * @param clazz
     * @param title 关键字为可选项，及可以为 null 或 ""
     * @return
     */
    Long findCount(Class<T> clazz,String title);
    
    /**
     * 查询本地资源数
     * @param clazz
     * @param serverName 服务器名称
     * @param title 关键字为可选项，及可以为 null 或 ""
     * @return
     */
    Long findNativeCount(Class<T> clazz, String serverName, String title);
   
    /**
     * 查询所有记录
     * @param clazz
     * @return
     */
    List<T> findAll(Class<T> clazz);
}
